package com.coship.vas.dapg.dao.common;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 
 * 
 * File Name : IBaseDao.java
 * 
 * @Description : 基础DAO，集成hibernate模板，包含通用数据操作方法
 * @author 904304
 */
public interface BaseDao<T>
{

	/**
	 * 返回要进行操作的实体类
	 * 
	 * @return
	 * @author zhangyimin
	 * @create 2008-4-22 下午02:35:01
	 */
	public abstract Class<T> getEntryClass();

	/**
	 * 保存一个对象
	 * 
	 * @param obj
	 */
	public void save(T obj);

	/**
	 * 保存或更新一个对象
	 * 
	 * @param obj
	 */
	public void saveorUpdate(T obj);

	/**
	 * 执行一条语句
	 * 
	 * @param obj
	 */
	public void execute(String hql);

	/**
	 * 更新一个对象
	 * 
	 * @param obj
	 */
	public void update(T obj);

	/**
	 * 删除一个对象
	 * 
	 * @author zhangym
	 * @create 2008-10-16 下午05:00:21
	 * @since
	 * @param object
	 */
	public void delete(T obj);

	/**
	 * 根据主键,获得对象
	 * 
	 * @author zhangym
	 * @create 2008-10-16 下午05:45:33
	 * @since
	 * @param key
	 * @return
	 */
	public T getByKey(Serializable key);

	/**
	 * 根据实例,获得对象集
	 * 
	 * @author zhangym
	 * @create 2008-10-16 下午05:46:07
	 * @since
	 * @return
	 */
	public List<T> findByExample(T obj);

	/**
	 * 加载所有对象
	 * 
	 * @author zhangym
	 * @create 2008-10-16 下午05:46:47
	 * @since
	 * @return
	 */
	public List<T> loadAll();

	/**
	 * 查找数据
	 * 
	 * @param obj
	 */
	public <X> List<X> search(String sql);

	/**
	 * 
	 * 分页查询
	 * 
	 * @param page
	 * @param hql
	 * @param values
	 * @return
	 * 
	 */
	public Page<T> queryPage(Page<T> page, String hql, Object... values);

	/**
	 * 
	 * 分页查询
	 * 
	 * @param page
	 * @param hql
	 * @param values
	 * @return
	 * 
	 */
	public Page<T> queryPage(Page<T> page, String hql,
			Map<String, Object> values);
}